package com.bed.lovewithpatientbed.service;

import com.bed.lovewithpatientbed.common.bean.LayUiPageBean;
import com.bed.lovewithpatientbed.common.params.UserSearchParams;
import com.bed.lovewithpatientbed.pojo.User;

import java.util.List;
import java.util.Map;

/**
 * @author xuxiaoding
 * @version 1.0.0
 * @ClassName IUserService.java
 * @Description TODO
 */
public interface IUserService {

    /**
     * @title register
     * @description 用户注册
     * @author xuxiaoding
     * @param user
     * @return Map<String, Object> 用于存储信息
     */
    Map<String, Object> register(User user);

    /**
     * @title login
     * @description 用户登录
     * @author xuxiaoding
     * @param user
     * @return boolean 成功true 失败false
     */
    boolean login(User user);

    /**
     * @title logout
     * @description 用户登出
     * @author xuxiaoding
     * @param user
     * @return boolean
     * @throws
     */
    boolean logout(User user);

    /**
     * @title updateUserByPrimaryKeySelective
     * @description 根据主键选择更新 user
     * @author xuxiaoding
     * @param user
     * @return boolean
     * @throws
     */
    boolean updateUserByPrimaryKeySelective(User user);

    /**
     * @title retrieveUserById
     * @description 根据主键查询用户
     * @author xuxiaoding
     * @param userId 用户Id
     * @return 返回查询到的用户信息
     */
    User retrieveUserById(Integer userId);

    /**
     * @title retrieveByUserPhone
     * @description 根据用户电话检索 User 信息
     * @author xuxiaoding
     * @param userPhone 用户电话
     * @return 返回查询结果
     */
    User retrieveByUserPhone(String userPhone);

    /**
     * @title retrieveUserCount
     * @description 查询用户总数
     * @author xuxiaoding
     * @return 返回数量
     */
    long retrieveUserCount();

    /**
     * @title retrieveAllUserWithLimit
     * @description 分页查询未被删除 user 所有数据
     * @author xuxiaoding
     * @param pageBean 分页封装类
     * @return 返回查询结果List
     */
    List<User> retrieveAllUserWithLimit(LayUiPageBean pageBean);

    /**
     * @title getCountByCondition
     * @description 获取该查询条件下的总数
     * @author xuxiaoding
     * @param userSearchParams 查询条件
     * @return 返回数量
     */
    long getCountByCondition(UserSearchParams userSearchParams);

    /**
     * @title retrieveUserByConditionWithLimit
     * @description 根据条件查询未被删除的数据
     * @author xuxiaoding
     * @param pageBean 分页封装类
     * @param userSearchParams 检索条件
     * @return 返回查询结果List
     */
    List<User> retrieveUserByConditionWithLimit(LayUiPageBean pageBean, UserSearchParams userSearchParams);

    /**
     * @title softDeleteUser
     * @description 软删除用户
     * @author xuxiaoding
     * @param userId 用户Id
     * @return 删除结果
     */
    boolean softDeleteUser(Integer userId);

    /**
     * @title batchSoftDeleteUser
     * @description 批量软删除用户
     * @author xuxiaoding
     * @param userIdList 用户 Id 列表
     * @return 返回删除结果
     */
    boolean batchSoftDeleteUser(Integer[] userIdList);
}
